package cn.slipi.admin.common.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * TODO: 请添加描述
 *
 * @author lee
 * @date 2019/4/8
 * @since 1.0.0
 */
public class DescartesUtil {

    public static List<String> descartes(List<List<String>> dimValues) {
        List<String> result = new ArrayList<>();

        for (int i = 0; i < dimValues.size(); i++) {
            List<String> curList = dimValues.get(i);
            /**
             * 如果是首个集合，直接放输入到结果集中
             */
            if (0 == i) {
                result.addAll(curList);
                continue;
            }
            /**
             * 将前一个集合的乘积 result，自我复制 curListCount 份，并将当前集合的元素追加到上边
             */
            selfCopy(result, curList);
        }
        return result;
    }

    /**
     * 根据当前的集合，将之前的结果集复制
     *
     * @param result  　　之前的集合相称的结果集
     * @param curList 　　当前集合
     */
    private static void selfCopy(List<String> result, List<String> curList) {
        List<String> tempList = new ArrayList<>();
        for (String strOfCurList : curList) {
            for (String strOfResult : result) {
                /**
                 * 因为这里是字符串集合相称，那么其实就是字符串相加。
                 */
                if (strOfResult.equals(strOfCurList)) {
                    continue;
                }
                tempList.add(strOfResult + ":" + strOfCurList);
            }
        }
        result.clear();
        result.addAll(tempList);
    }
}
